/**
 * https://www.bilibili.com/video/BV1Mb411e7re?p=25
 * Buzzer [ˈbʌzə(r)] n.蜂鸣器
 * 蜂鸣器是一种将电信号转换为声音信号的器件，常用来产生设备的按键音、报警音等提示信号
 * 蜂鸣器按驱动方式可分为"有源蜂鸣器"和"无源蜂鸣器"
 * 有源蜂鸣器：内部自带振荡源，将正负极接上直流电压即可持续发声，频率固定 (声音单一,不可改变)
 * 无源蜂鸣器：内部不带振荡源，需要控制器提供振荡脉冲才可发声，调整提供振荡脉冲的频率，可发出不同频率的声音 (扬声器,麦克风)
 * 
 * 驱动方式:
 *  1.三极管驱动
 *  2.集成电路驱动(ULN2003D, 达灵顿晶体管阵列,高电压,高电流,驱动器, 一般用于驱动"步进电机")
 * 
 * 视频有步进电机, 所以蜂鸣器孙便接在 ULN2003D 上的. (ULN2003D 大电压、电流,驱动步进电机)
 * 
 * https://www.bilibili.com/video/BV1Mb411e7re?p=26
 */
#include <REGX52.H>
#include "Link/Delay_Utils.h"
#include "Link/Timer0_Utils.h"
#include "Link/Buzzer_Utils.h"
#include "Music/Music_XiaoXingXing.h"
#include "Music/Music_TianKongZhiCheng.h"

static void Timer0_onTick() {
    //切换状态
    Buzzer_switch();
}

void main_buzzer() {
    unsigned int value;
    //音乐选择: Music_xiao_xing_xing, Music_tian_kong_zhi_cheng
    unsigned char* Music = &Music_tian_kong_zhi_cheng;
    
    /**
     * 1.蜂鸣器播放提示音
     */
    // Buzzer_bell(1000);

    /**
     * 2.以特定频率播放1s时间
     */
    // // value = Timer0_Caculate_TH_TL_by_Time(1000);     //计算1ms溢出
    // value = Timer0_Caculate_TH_TL_by_Frequency(1000);   //设置震荡频率1000Hz
    // Timer0_Init(value, 0);
    // Timer0_setOnTickListener(1, &Timer0_onTick);        //传入函数指针
    // Delayms(1000); Timer0_stop(); Buzzer_stop();        //播放1s后停止

    /**
     * 3.播放音乐 35.13
     */
    Buzzer_Play_Music_Init();
    Buzzer_Play_Music(Music);

    while (1);
}
